/*
  学习目标：多泛型变量-约束
  语法： <泛型变量1, 泛型变量2>(参数1: 泛型变量1， 参数2: 泛型变量2)：[泛型变量1, 泛型变量2]
  变量间约束：根据业务，使用extends加上条件
*/
// 练习1
function fn<T, K>(value: T, value2: K): { name: T; age: K } {
  return {
    name: value,
    age: value2,
  };
}

fn('123', 456);
fn([123], { title: 123 });

// 练习2 - 变量间添加约束条件
function getValueByName<T, K extends keyof T>(obj: T, name: K): T[K] {
  return obj[name];
}

// // 期望：为函数添加类型，
// // 效果：第二个参数能限定取值范围
const res1 = getValueByName({ name1: 'zs', age1: 18 }, 'name1'); // 期望约束第二个参数：取出参数1中的键名
const res2 = getValueByName({ name2: 'zs', age2: 18 }, 'age3'); // 期望约束第二个参数：取出参数1中的键名
const res3 = getValueByName({ name3: 'zs', age3: 18 }, 'age2'); // 期望约束第二个参数：取出参数1中的键名
